// mime-type.js

// 扩展名到 MIME 类型的映射表
const mimeTypes = {
  // 文本类
  '.txt': 'text/plain',
  '.html': 'text/html',
  '.htm': 'text/html',
  '.css': 'text/css',
  '.csv': 'text/csv',
  '.js': 'application/javascript',
  '.mjs': 'application/javascript',
  '.json': 'application/json',
  '.xml': 'application/xml',
  '.md': 'text/markdown',
  '.yaml': 'text/yaml',
  '.yml': 'text/yaml',

  // 图片类
  '.jpg': 'image/jpeg',
  '.jpeg': 'image/jpeg',
  '.png': 'image/png',
  '.gif': 'image/gif',
  '.webp': 'image/webp',
  '.svg': 'image/svg+xml',
  '.ico': 'image/x-icon',
  '.bmp': 'image/bmp',
  '.tiff': 'image/tiff',

  // 视频类
  '.mp4': 'video/mp4',
  '.webm': 'video/webm',
  '.ogg': 'video/ogg',
  '.mov': 'video/quicktime',
  '.avi': 'video/x-msvideo',
  '.wmv': 'video/x-ms-wmv',
  '.flv': 'video/x-flv',
  '.mkv': 'video/x-matroska',

  // 音频类
  '.mp3': 'audio/mpeg',
  '.wav': 'audio/wav',
  '.oga': 'audio/ogg',
  '.m4a': 'audio/mp4',
  '.aac': 'audio/aac',
  '.flac': 'audio/flac',
  '.opus': 'audio/opus',

  // 字体类
  '.woff': 'font/woff',
  '.woff2': 'font/woff2',
  '.ttf': 'font/ttf',
  '.otf': 'font/otf',

  // 应用类
  '.pdf': 'application/pdf',
  '.zip': 'application/zip',
  '.rar': 'application/x-rar-compressed',
  '.tar': 'application/x-tar',
  '.gz': 'application/gzip',
  '.bz2': 'application/x-bzip2',
  '.7z': 'application/x-7z-compressed',
  '.exe': 'application/x-msdownload',
  '.dmg': 'application/x-apple-diskimage',
  '.iso': 'application/x-iso9660-image',
  '.deb': 'application/x-debian-package',
  '.rpm': 'application/x-redhat-package-manager',

  // 文档类
  '.doc': 'application/msword',
  '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  '.xls': 'application/vnd.ms-excel',
  '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  '.ppt': 'application/vnd.ms-powerpoint',
  '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  '.odt': 'application/vnd.oasis.opendocument.text',
  '.ods': 'application/vnd.oasis.opendocument.spreadsheet',
  '.odp': 'application/vnd.oasis.opendocument.presentation',

  // 编程相关
  '.wasm': 'application/wasm',
  '.sh': 'application/x-sh',
  '.php': 'application/x-httpd-php',
  '.py': 'text/x-python',
  '.java': 'text/x-java-source',
  '.c': 'text/x-c',
  '.cpp': 'text/x-c++src',
  '.h': 'text/x-c-header',
  '.cs': 'text/x-csharp',
  '.go': 'text/x-go',
  '.rs': 'text/x-rust',
  '.swift': 'text/x-swift',

  // 其他
  '.bin': 'application/octet-stream',
  '.dat': 'application/octet-stream',
  '.log': 'text/plain'
};

/**
 * 根据文件扩展名获取 MIME 类型
 * @param {string} filePath 文件名或扩展名（如 ".mp4" 或 "video.mp4"）
 * @returns {string} MIME 类型，默认返回 'application/octet-stream'
 */
export function getMimeType(filePath) {
  // 提取扩展名（兼容带点和不带点）
  const ext = filePath.includes('.') 
    ? filePath.slice(filePath.lastIndexOf('.')).toLowerCase()
    : `.${filePath.toLowerCase()}`;

  return mimeTypes[ext] || 'application/octet-stream';
}

// CommonJS 导出
if (typeof module !== 'undefined' && module.exports) {
  module.exports = getMimeType;
  module.exports.getMimeType = getMimeType;
  module.exports.mimeTypeMap = mimeTypes;
}

// ES6 导出
if (typeof exports !== 'undefined' && typeof exports === 'object') {
  exports.default = getMimeType;
  exports.getMimeType = getMimeType;
  exports.mimeTypeMap = mimeTypes;
}
